import os
import time
from io import BytesIO

import requests
from selenium import webdriver
from bs4 import BeautifulSoup
from urllib.parse import urlparse
from PIL import Image

# 定义一个中国明星的数组
chinese_celebrities = [
    "祝晓晗",
    "彭十六elf",
    "陈翔六点半蘑菇头",
    "陈翔六点半球球",
    "陈翔六点半腿腿",
    "陈翔六点半米线儿",
    "陈翔六点半冷檬",
    "陈翔六点半闰土",
    "陈翔六点半猪小明"

]
# 设置搜索关键字和要下载的图片数量
num_images_to_download = 100
# 循环遍历明星数组
for search_query in chinese_celebrities:
    # 创建一个目录来保存下载的图片（每个明星一个目录）
    os.makedirs(search_query, exist_ok=True)
    # 创建一个目录来保存下载的图片
    os.makedirs(search_query, exist_ok=True)

    # 启动Chrome浏览器
    driver = webdriver.Chrome()
    # 构建百度图片搜索的URL
    search_url = f"https://image.baidu.com/search/index?tn=baiduimage&word={search_query}"

    # 打开搜索结果页面
    driver.get(search_url)

    # 等待一些时间以确保页面加载完成
    time.sleep(3)

    # 模拟滚动浏览器窗口以加载更多图片
    for _ in range(10):
        driver.execute_script("window.scrollBy(0, 1000)")

    # 获取页面源代码
    page_source = driver.page_source

    # 使用BeautifulSoup解析HTML页面
    soup = BeautifulSoup(page_source, 'html.parser')

    # 找到所有的图片标签
    img_tags = soup.find_all('img', class_='main_img')

    # 用于计数已经下载的图片数量
    downloaded_images = 0

    # 遍历图片标签并下载图片
    for img_tag in img_tags:
        # 获取图片的URL
        img_url = img_tag.get('src')

        # 如果没有data-src属性，则尝试获取data-imgurl属性
        if not img_url:
            img_url = img_tag.get('data-imgurl')

        # 如果仍然没有有效的URL，则跳过此图片
        if not img_url:
            continue

        try:
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
            }
            # 下载图片
            img_response = requests.get(img_url, headers=headers)
            # 检查请求是否成功
            if img_response.status_code == 200:
                downloaded_images += 1
                # 打开图片并保存为JPG格式
                img = Image.open(BytesIO(img_response.content))
                img = img.convert("RGB")  # 将图像模式转换为RGB
                jpg_filename = search_query + '_' + str(downloaded_images) + ".jpg"
                img.save(os.path.join(search_query, jpg_filename), "JPEG")

            # 如果已经下载了足够的图片，则退出循环
            if downloaded_images >= num_images_to_download:
                break
        except requests.exceptions.RequestException as e:
            print(f"URL无效，发生异常：{e}")
    print(f"{downloaded_images}张图片已下载到{search_query}目录。")

    # 关闭浏览器
    driver.quit()
